<?php

/**
 * Класс для обработки формы регистрации
 *
 * @author kingop
 */
class FormProcessor_UserRegistration extends FormProcessor {

    protected $db = null;               // объект для соединения с базой данных
    public $user = null;                // объект класса DatabaseObject_User
    protected $_validateOnly = false;   // флаг, указывающий тип запроса: true = ajax

    public function __construct($db) {
        parent::__construct();
        $this->db = $db;
        $this->user = new DatabaseObject_User($this->db);
        $this->user->type = 'member';
        $this->user->isApproved = 0;
    }

    public function validateOnly($flag) {
        $this->_validateOnly = (bool) $flag;
    }

    public function process(Zend_Controller_Request_Abstract $request) {
        // проверим логин
        $this->login = trim($request->getPost('login'));

        if (strlen($this->login) == 0)
            $this->addError('login', 'Вы должны указать логин');
        else if (!DatabaseObject_User::IsValidUsername($this->login))
            $this->addError('login', 'Логин содержит недопустимые символы');
        else if ($this->user->usernameExists($this->login))
            $this->addError('login', 'Выбранный вами логин уже занят');
        else
            $this->user->login = $this->login;

        // проверим пароль
        $this->password = trim($request->getPost('password'));

        if (strlen($this->password) == 0)
            $this->addError('password', 'Вы должны указать пароль');
        else {
            $this->password_again = trim($request->getPost('password_again'));
            if (strlen($this->password_again) == 0)
                $this->addError('password_again', 'Вы должны подтвердить пароль');
            else {
                if ($this->password != $this->password_again)
                    $this->addError('password_again', 'Пароли не совпадают');
                else {
                    $this->user->password = $this->password;
                    $this->user->_newPassword = $this->password;
                }
            }
        }

        // проверим предприятие
        $this->company = trim($request->getPost('company'));
        if (strlen($this->company) == 0)
            $this->addError('company', 'Вы должны указать предприятие');
        else
            $this->user->company = $this->company;

        // проверим область
        $this->region = trim($request->getPost('region'));
        if (strlen($this->region) == 0)
            $this->addError('region', 'Вы должны указать область');
        else
            $this->user->region = $this->region;
        
          // проверим город
        $this->city = trim($request->getPost('city'));
        if (strlen($this->city) == 0)
            $this->addError('city', 'Вы должны указать город');
        else
            $this->user->city = $this->city;
        
          // проверим юридический адрес
        $this->adress = trim($request->getPost('adress'));
        if (strlen($this->adress) == 0)
            $this->addError('adress', 'Вы должны указать юридический адрес');
        else
            $this->user->adress = $this->adress;

        // проверим фактический адрес
        $this->real_adress = trim($request->getPost('real_adress'));
        if (strlen($this->real_adress) == 0)
            $this->addError('real_adress', 'Вы должны указать фактический адрес');
        else
            $this->user->real_adress = $this->real_adress;

        // проверим телефон
        $this->company_phone = trim($request->getPost('company_phone'));
        if (strlen($this->company_phone) == 0)
            $this->addError('company_phone', 'Вы должны указать телефон предприятия');
        else
            $this->user->company_phone = $this->company_phone;

        // проверим код ОКПОУ
        $this->code = trim($request->getPost('code'));
        if (strlen($this->code) == 0)
            $this->addError('code', 'Вы должны указать код ОКПОУ');
        else
            $this->user->code = $this->code;

        // проверим категории
        if (!isset($_POST['cats']) || empty($_POST['cats']))
            $this->addError('category', 'Вы должны указать хотя бы одну категорию');

        // проверим email
        $this->email = trim($request->getPost('email'));
        if (strlen($this->email) == 0)
            $this->addError('email', 'Вы должны указать email');
        else if ($this->user->emailExists($this->email)) {
            $this->addError('email', 'Указанный вами email уже занят');
        }
        else
            $this->user->email = $this->email;

        // проверим контактное лицо
        $this->manager = trim($request->getPost('manager'));
        if (strlen($this->manager) == 0)
            $this->addError('manager', 'Вы должны указать контактное лицо');
        else
            $this->user->manager = $this->manager;

        // проверим должность
        $this->post = trim($request->getPost('post'));
        if (strlen($this->post) == 0)
            $this->addError('post', 'Вы должны указать должность');
        else
            $this->user->post = $this->post;

        // проверим телефон
        $this->phone = trim($request->getPost('phone'));
        if (strlen($this->phone) == 0)
            $this->addError('phone', 'Вы должны указать телефон');
        else
            $this->user->phone = $this->phone;

        // проверим CAPTCHA
        $session = new Zend_Session_Namespace('captcha');
        $this->captcha = $this->sanitize($request->getPost('captcha'));

        if ($this->captcha != $session->phrase)
            $this->addError('captcha', 'Вы ввели неверный код подтверждения');

        // если не было ошибок, сохраним пользователя
        if (!$this->_validateOnly && !$this->hasError()) {
            $this->user->save();

            // сохраним категории пользователя
            $user_id = $this->user->getId();
            foreach ($request->getPost('cats') as $cat) {
                $userCat = new DatabaseObject_UsersCats($this->db);
                $userCat->idUser = $user_id;
                $userCat->idCat = $cat;
                $userCat->save();
            }
            unset($session->phrase);
        }

        return !$this->hasError();
    }

}

?>
